package com.xyoto.community.service;

import com.xyoto.community.dto.PageDTO;
import com.xyoto.community.po.NewestInteractMessagePO;
import com.xyoto.community.utils.Result;
import com.xyoto.community.vo.InteractMessageListVO;

import java.util.List;

/**
 * @author coderFu
 * @create 2021/10/5
 */
public interface MessageService {

    /**
     * 获取用户消息列表
     * @return
     */
    Result getMessageList();

    /**
     * 保存消息
     * @param userId 用户id
     * @param targetId 目标用户id
     * @param moduleId 模块id
     * @param moduleType 模块类型
     * @param zeroParentId 回复回复的id
     * @param firstParentId 父类id 动态id 。。。评论id（包括评论下属的回复、评论点赞、回复点赞）
     * @param secondParentId 二级父类， 评论id
     * @param thirdParentId 三级父类 动态id 活动id...
     */
    void saveMessage(Integer userId, Integer targetId, Integer moduleId, Short moduleType,Integer zeroParentId, Integer firstParentId, Integer secondParentId, Integer thirdParentId);

    /**
     * 删除消息
     * @param userId 用户id
     * @param moduleId 模块id
     * @param moduleType 模块类型
     */
    void deleteMessage(Integer userId, Integer moduleId, Short moduleType);


    /**
     * 获取互动消息列表
     * @param pageDTO
     * @return
     */
    Result getInteractMessageList(PageDTO pageDTO);

    /**
     * 获取粉丝消息列表
     * @param pageDTO
     * @return
     */
    Result getFansMessageList(PageDTO pageDTO);

    /**
     * 根据三级父类id删除消息
     * @param dynamicId
     * @param type
     */
    void deleteMessageByThirdParentId(Integer dynamicId, List<Short> type);

    /**
     * 根据二级父类id删除消息
     * @param dynamicCommentId
     * @param type
     */
    void deleteMessageBySecondParentId(Integer dynamicCommentId, List<Short> type);

    /**
     * 根据一级父类id删除消息
     * @param dynamicCommentReplyId
     * @param type
     */
    void deleteMessageByFirstParentId(Integer dynamicCommentReplyId, List<Short> type);

    /**
     * 根据零级父类id删除消息
     * @param dynamicDoubleReplyId
     * @param type
     */
    void deleteMessageByZeroParentId(Integer dynamicDoubleReplyId, List<Short> type);


    /**
     * 互动消息的处理逻辑
     * @param interactMessagePoList
     * @param pageSize
     * @return
     */
    List<InteractMessageListVO> getInteractMessageDeal(List<NewestInteractMessagePO> interactMessagePoList, Integer pageSize);


}
